package br.senai.sc.entity;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import br.senai.sc.dao.GenericDAOImp;

@Entity
@Table(name = "edital")
public class Edital implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = -8545558583654438962L;
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer id;
	@Column(name = "de_titulo")
	private String titulo;
	@Column(name = "nm_local")
	private String local;
	@OneToOne
	@JoinColumn(name = "produto_servico_id")
	private ProdutoServico produtoServico;
	@Column(name = "qt_produto")
	private Integer quantidadeProduto;
	@Column(name = "vl_maximo")
	private Double valor_max;
	@Column(name = "dt_inicio")
	private Date data_inicio;
	@Column(name = "dt_fim")
	private Date data_fim;
	@Column(name = "fl_ativo")
	private boolean ativo;
	@Column(name = "fl_categoria")
	private Integer categoria;
	@Column(name = "num_acessos")
	private Integer numAcessos;
	@Column(name = "descremento_min")
	private Double decrementoMinimo;

	/*
	 * @SuppressWarnings("unchecked") public StreamedContent getImage() {
	 * StreamedContent image; FacesContext context =
	 * FacesContext.getCurrentInstance(); if (context.getCurrentPhaseId() ==
	 * PhaseId.RENDER_RESPONSE) { // So, we're rendering the view. Return a stub
	 * StreamedContent so // that it will generate right URL. return new
	 * DefaultStreamedContent(); } else { Imagem imagem = new Imagem();
	 * 
	 * @SuppressWarnings("rawtypes") GenericDAOImp dao = new GenericDAOImp();
	 * imagem = (Imagem) dao.listByProperty(Imagem.class, "produtoServico",
	 * produtoServico); image = new DefaultStreamedContent(new
	 * ByteArrayInputStream( imagem.getImagem()), "image/png"); return image; }
	 * }
	 */

	@SuppressWarnings("unchecked")
	public String getImage() {
		/*
		 * if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) { // So,
		 * we're rendering the view. Return a stub StreamedContent so // that it
		 * will generate right URL. return ""; } else {
		 */
		Imagem imagem = new Imagem();
		@SuppressWarnings("rawtypes")
		GenericDAOImp dao = new GenericDAOImp();
		imagem = (Imagem) dao.listByProperty(Imagem.class, "produtoServico",
				produtoServico);
		if (imagem == null) {
			return "";
		}
		return imagem.getDescricao();
		/* } */
	}

	public Integer getCategoria() {
		return categoria;
	}

	public void setCategoria(Integer categoria) {
		this.categoria = categoria;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	public String getLocal() {
		return local;
	}

	public void setLocal(String local) {
		this.local = local;
	}

	public ProdutoServico getProdutoServico() {
		return produtoServico;
	}

	public void setProdutoServico(ProdutoServico produtoServico) {
		this.produtoServico = produtoServico;
	}

	public Integer getQuantidadeProduto() {
		return quantidadeProduto;
	}

	public void setQuantidadeProduto(Integer quantidadeProduto) {
		this.quantidadeProduto = quantidadeProduto;
	}

	public Double getValor_max() {
		return valor_max;
	}

	public void setValor_max(Double valor_max) {
		this.valor_max = valor_max;
	}

	public Date getData_inicio() {
		return data_inicio;
	}

	public void setData_inicio(Date data_inicio) {
		this.data_inicio = data_inicio;
	}

	public Date getData_fim() {
		return this.data_fim;
	}

	public String getData_fimFormatada() {
		return new SimpleDateFormat("dd/MM/yyyy HH:mm").format(data_fim)
				.concat("h");
	}

	public String getData_inicioFormatada() {
		return new SimpleDateFormat("dd/MM/yyyy HH:mm").format(data_inicio)
				.concat("h");
	}

	public void setData_fim(Date data_fim) {
		this.data_fim = data_fim;
	}
	
	public boolean isEmBreve(){
		Calendar dataAtual = Calendar.getInstance();
		Calendar dataInicio = Calendar.getInstance();
		dataInicio.setTime(this.data_inicio);
		if (dataAtual.before(dataInicio)){
			return true;
		}
		return false;
	}

	public boolean isAtivo() {
		return ativo;
	}

	public void setAtivo(boolean ativo) {
		this.ativo = ativo;
	}

	public Integer getNumAcessos() {
		return numAcessos;
	}

	public void setNumAcessos(Integer numAcessos) {
		this.numAcessos = numAcessos;
	}
	
	public Double getDecrementoMinimo() {
		return decrementoMinimo;
	}
	
	public void setDecrementoMinimo(Double decrementoMinimo) {
		this.decrementoMinimo = decrementoMinimo;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Edital other = (Edital) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}
}
